NodeJS事件循环

您所在的位置:网站首页 nodejs 非阻塞 NodeJS事件循环

NodeJS事件循环

2023-04-15 16:34| 来源: 网络整理| 查看: 265

NodeJS事件循环和浏览器的事件循环机制有所不同,在讲解之前需要先铺垫一点别的知识。

异步I/O

I/O指的是操作系统提供的IO(数据进出)的能力,比如键盘输入,显示器上会有专门的数据输出接口,这个接口向下会进入到操作系统这个层面,操作系统系统会提供诸多的I/Od的能力,比如磁盘读写,DNS查询、数据库连接,网络请求等。

I/O我们可以看做是上层应用与下层系统之间的数据交互,上层依赖于下层,上层也可以对下层提供的能力进行改造,根据起是否异步阻塞可分为异步非阻塞的异步I/O模型和同步阻塞的同步I/O模型。距离NodeJS的readFile 就是一个异步非阻塞的接口,而readFileSync就是一个同步阻塞接口。

NodeJS架构

此图是NodeJS架构,NodeJS被分为四层,分别是应用层、V8引擎层、NodeJS API层和libuv层。

应用层: 即JavaScript交互层,常见的就是NodeJS的模块,比如http,fsV8引擎层:用V8引擎来解析JavaScript语法,进而和下层API交互Node API层:为上层模块提供系统调用,一般由C语言实现,和操作系统交互libuv层: 是跨平台的底层封装,实现了事件循环、文件操作等,是NodeJS实现异步的核心事件循环

NodeJS执行非阻塞I/O操作,尽管JavaScript是单线程的,由于大多数内核是多线程的,NodeJs会尽可能将操作装载到系统内核。因此可以处理在后台执行的多个操作,当其一个操作完成时,内核会通知NodeJS,以便Node.js可以将相应的回调添加到轮询队列中以最终执行。

NodeJS启动启动时会初始化event loop,每一个event loop会包含6个循环阶段

┌───────────────────────┐ ┌─>│ timers │ │ └──────────┬────────────┘ │ ┌──────────┴────────────┐ │ │ I/O callbacks │ │ └──────────┬────────────┘ │ ┌──────────┴────────────┐ │ │ idle, prepare │ │ └──────────┬────────────┘ ┌───────────────┐ │ ┌──────────┴────────────┐ │ incoming: │ │ │ poll │


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3